/*
 *    This file is part of ACADO Toolkit.
 *
 *    ACADO Toolkit -- A Toolkit for Automatic Control and Dynamic Optimization.
 *    Copyright (C) 2008-2009 by Boris Houska and Hans Joachim Ferreau, K.U.Leuven.
 *    Developed within the Optimization in Engineering Center (OPTEC) under
 *    supervision of Moritz Diehl. All rights reserved.
 *
 *    ACADO Toolkit is free software; you can redistribute it and/or
 *    modify it under the terms of the GNU Lesser General Public
 *    License as published by the Free Software Foundation; either
 *    version 3 of the License, or (at your option) any later version.
 *
 *    ACADO Toolkit is distributed in the hope that it will be useful,
 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
 *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 *    Lesser General Public License for more details.
 *
 *    You should have received a copy of the GNU Lesser General Public
 *    License along with ACADO Toolkit; if not, write to the Free Software
 *    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
 */



 /**
 *    \file interfaces/matlabl/models/pendulum.cpp
 *    \author Boris Houska, Hans Joachim Ferreau
 *    \date 2008
 */



void pendulum( DifferentialEquation *f ){


    DifferentialState      phi;    // the angle phi
    DifferentialState     dphi;    // the first derivative of phi w.r.t time

    Control                  F;    // a force acting on the pendulum

    Parameter                l;    // the length of the pendulum

    const double m     = 1.0  ;    // the mass of the pendulum
    const double g     = 9.81 ;    // the gravitational constant
    const double alpha = 2.0  ;    // frictional constant


    IntermediateState z;

    z = sin(phi);

    *f << dot(phi) == dphi;
    *f << dot(dphi) == -(m*g/l)*z - alpha*dphi + F/(m*l);
}



